
package com.be.beadmin.project.service;


import com.be.beadmin.basicData.entity.User;
import com.be.beadmin.common.entity.PageEntity;
import com.be.beadmin.project.dto.input.TeamInfoByTypeDto;
import com.be.beadmin.project.dto.input.TeamInfoDto;
import com.be.beadmin.project.dto.input.TeamInfoPageDto;
import com.be.beadmin.project.dto.output.TeamInfoByTypeEx;
import com.be.beadmin.project.dto.output.TeamInfoEx;
import com.be.beadmin.project.dto.output.UserInfoSimpEx;
import com.be.beadmin.project.entity.Team;
import com.be.beadmin.project.entity.TeamInfo;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
* @description 服务接口
* @author zjm
* @date 2023-02-02
**/
public interface TeamInfoService {

    /**
    * 分页的查询接口
    * @param pageEntity
    * @return
    */
    Page<TeamInfoEx> getTeamInfoByPage(PageEntity pageEntity);

    /**
     * @param teamInfoDto
     * @return
     */
    int addTeamInfo(TeamInfoDto teamInfoDto);

    /**
     * @param teamInfoDto
     * @return
     */
    int updateTeamInfo(TeamInfoDto teamInfoDto);

    /**
    * @param id
    */
    void delTeamInfo(String id);

    /**
    * 删除多个角色
    * @param ids
    */
    void delTeamInfos (List<String> ids);

    void addTeamInfos(List<TeamInfoDto> teamInfoDtos, Team team);

    /**
     * 获取指定id的团队成员信息
     * @param teamInfoId
     * @return
     */
    TeamInfo getTeamByIdAndDelete(String teamInfoId);

    /**
     * 获取所有角色类型
     * @return
     */
    List<String> getRoleType();

    /**
     * 获取所有用户的简易信息
     * @return
     */
    List<UserInfoSimpEx> getUserInfoSimp();


    List<TeamInfo> getTeamInfoByInfoId(String infoId);

    /**
     * 获取指定项目的某个角色类型的成员
     * @param infoId
     * @return
     */
    List<TeamInfo> getTeamInfoByInfoIdAndType(String infoId,String category);




    /**
     * 获取指定项目的某个角色类型的成员姓名
     * @param infoId
     * @return
     */
    List<String> getNameByInfoIdAndType(String infoId,String category);

    /**
     * 为一种角色添加多个团队成员
     */
    void addTeamInfoByRoleType(TeamInfoByTypeDto teamInfoByTypeDto);

    /**
     * 分页获得团队所有团队成员--按照角色分
     * @param teamInfoPageDto
     * @return
     */
    String getTeamInfosByPageAndRoleType(TeamInfoPageDto teamInfoPageDto);


    /**
     * 分页获得团队所有团队成员--按照角色分
     * @param teamId
     * @return
     */
    List<TeamInfoByTypeEx> getAllTeamInfosByRoleType(String teamId);

    /**
     * 获得团队某个角色的所有团队成员
     * @param teamId
     * @param roleType
     * @return
     */
    List<TeamInfo> getTeamInfosByRoleType(String teamId, String roleType);

    /**
     * 为一种角色修改团队成员
     * @param teamInfoByTypeDto
     */
    void updateTeamInfosByRoleType(TeamInfoByTypeDto teamInfoByTypeDto);

    /**
     * 删除某一种角色团队成员
     * @param teamId
     * @param roleType
     */
    void delTeamInfosByRoleType(String teamId, String roleType);

    /**
     * 删除某一个团队成员
     * @param teamId
     * @param userId
     */
    void delOneTeamMember(String teamId, String userId, String roleId);


    /**
     * 批量删除某些角色团队成员
     * @param teamId
     * @param roleTypes
     */
    void delBatchTeamInfosByRoleType( String teamId,  List<String> roleTypes);

}